package base.reflect;

import base.demo.Person;

public class ReflectDemo {
    public static void main(String[] args) throws ClassNotFoundException {
//        getClassObject_1();
//        System.out.println("--------------------");

//        getClassObject2();
        getClassObject3();


//        System.out.println("--------------------");
//        getClassObject_3();
    }

    /*
     * 获取字节码对象的方式：
     * 方式一：Object类中的getClass()方法的。
     * 想要用这种方式，必须要明确具体的类，并创建对象。
     * 麻烦。
     */
    public static void getClassObject_1() {
        Person p = new Person();
        Class clazz = p.getClass();

        Person p1 = new Person();
        Class clazz1 = p1.getClass();
        System.out.println(clazz == clazz1);
    }


    /*
     * 方式二：任何数据类型都具备一个静态的属性.class来获取其对应的Class对象。
     * 相对简单，但是还是要明确用到类中的静态成员。
     * 还是不够扩展。
     */
    public static void getClassObject2() {
        Class clazz = Person.class;
        Class clazz1 = Person.class;
        System.out.println(clazz == clazz1);

    }


    /*
     * 方式三：只要通过给定的类的字符串名称就可以获取该类，更为扩展。
     * 可以用Class类中的方法完成。
     * 该方法就是forName。
     * 这种方法只要有名称即可，更为方便，扩展性更强。
     */
    public static void getClassObject3() throws ClassNotFoundException {
        String className="base.demo.Person";

        Class clazz=Class.forName(className);
        System.out.println(clazz);
    }

    public static void getClassObject4() {
    }

    public static void getClassObject5() {
    }


}




























